/**
 * DEPENDENCIAS:
 * modulo meusCRUD.js
 * modulo meusPopups.js 
 * modulo meusGerenciamentoDeErros.js
 * 
 * FUNCIONALIDADE:
 * Funcoes que montam formularios em formato Wizard
 * 
 *  TODO:
 *  melhorar funcoes, generalizar wizard e wizard update passando mais parametros
 *  como nome dos botoes 
 *  funcao de popular
 *  funcao de persistencia
 *  
 *  melhorar funcao de wizard update file, passando mais parametros
 *  como mensagem de sucesso
 */

/*
 carrega um formulario com formato wizard para persistencia
 */
function wizard(formId,url,validate){
	
	//habilita e configura o wizard
	var wizardObj = $("#"+formId).formwizard({ 
		historyEnabled	: true,
		validationEnabled : false,
		myValidationEnabled : validate,
		validationOptions : undefined, 
	 	focusFirstInput : true,
	 	textNext: "Avançar",
	 	textBack: "Voltar",
	 	textSubmit: "Salvar",
	 	formPluginEnabled: true,
	 	formOptions :{
	 		"beforeSend": function(xhr){
				var registro = popular();
				salvar(formId, url, registro );		
	 			xhr.abort();
	 		},
			resetForm: true
	 	}
	 });

	 //estiliza os botoes do wizard como jqueryUI componentes
	$("#back").button();
	$("#next").button();

	if(validate){
		//habilita a validacao do form
		$("#"+formId).validationEngine('attach');
	}
	
	return wizardObj;
	
}

/*
carrega um formulario com formato wizard para update
*/
function wizardUpdate(formId,url,validate){
	
	//habilita e configura o wizard
	var wizardObj = $("#"+formId).formwizard({ 
		historyEnabled	: true,
		validationEnabled : false,
		myValidationEnabled : validate,
		validationOptions : undefined,
	 	focusFirstInput : true,
	 	textNext: "Avançar",
	 	textBack: "Voltar",
	 	textSubmit: "Atualizar",
	 	formPluginEnabled: true,
	 	formOptions :{
	 		"beforeSend": function(xhr){
				var registro = popular();
				atualizar(formId, url, registro );		
	 			xhr.abort();
	 		},
			resetForm: true
	 	}
	 });

	 //estiliza os botoes do wizard como jqueryUI componentes
	$("#back").button();
	$("#next").button();

	if(validate){
		//habilita a validacao do form
		$("#"+formId).validationEngine('attach');
	}
	
	return wizardObj;
	
}

/*
carrega um formulario com formato wizard para persistencia com arquivo
*/
function wizardFileSave(formId,url,validate){
	
	var wizardObj = $("#"+formId).formwizard({ 
		historyEnabled	: true,
		validationEnabled : false,
		myValidationEnabled : validate,
		validationOptions : undefined,
	 	focusFirstInput : true,
	 	textNext: "Avançar",
	 	textBack: "Voltar",
	 	textSubmit: "Salvar",
	 	formPluginEnabled: true,
	 	formOptions :{
	 		"beforeSend": function(xhr){
	 			xhr.abort();
	 			var xhrUpload = new XMLHttpRequest();
	 			var valido = $("#"+formId).validationEngine('validate');
	 			if(valido==false){
					xhrUpload.abort();
				}else{
					$("#"+formId).block({message: "<img border='0' src='"+"img/ajax-loader.gif"+"'/> &nbsp;Salvando...",
						 css: { 'border': '0px',
								'background': 'transparent',
								'color': 'white'
						      } 
					});
				}
                xhrUpload.open(    "POST",url,false);
                xhrUpload.setRequestHeader("Cache-Control", "no-cache");
                xhrUpload.setRequestHeader("X-Requested-With", "XMLHttpRequest");
                var fd = new FormData();
                var registro = popular();
                var uploadArray = registro.uploadArray;
                for(var i =0; i< uploadArray.length;i++){
                		fd.append(uploadArray[i].nomeVariavel, uploadArray[i].arquivo);
                }
                fd.append("json",$.toJSON(registro));
                if($("#role").val()!=null){
                		fd.append("role",$("#role").val());
                }
                $("#"+formId).block({message: "<img border='0' src='"+"img/ajax-loader.gif"+"'/> &nbsp;Salvando...",
					 css: { 'border': '0px',
							'background': 'transparent',
							'color': 'white'
					      } 
				});
                xhrUpload.send(fd);
                if (xhrUpload.status == 200) {
	            		//complete
					$("#"+formId).unblock();
					$("#"+formId).validationEngine("hide");
					//success
					showDialog("Sucesso","Salvo com sucesso, para prosseguir verifique o email informado!");
					window.location.hash='';
					window.location.hash.replace('#', '');
					$("#subtitulo").html('<h3 class="ui-widget-header">Sucesso!</h3>');
					$("#formWrapper").html("Seus dados foram cadastrados com sucesso. Um email com sua senha foi enviado ao endereço de email informado");
	            	}else if(xhrUpload.status == 500){
	            		//complete
						$("#"+formId).unblock();
						$("#"+formId).validationEngine("hide");
						trataErro(xhrUpload, xhrUpload.statusText, "Erro");
	            	}else{
	                		//complete
	    					$("#"+formId).unblock();
	    					$("#"+formId).validationEngine("hide");
	    					//error
	                		showDialog('Erro',"Erro de comunicação");
	            	}
                
	 		},
			resetForm: true
	 	}
	 });

	 //estiliza os botoes do wizard como jqueryUI componentes
	$("#back").button();
	$("#next").button();

	if(validate){
		//habilita a validacao do form
		$("#"+formId).validationEngine('attach');
	}
}


/*
carrega um formulario com formato wizard para update com arquivo
*/
function wizardFileUpdate(formId,url,validate){
	
	var wizardObj = $("#"+formId).formwizard({ 
		historyEnabled	: true,
		validationEnabled : false,
		myValidationEnabled : validate,
		validationOptions : undefined,
	 	focusFirstInput : true,
	 	textNext: "Avançar",
	 	textBack: "Voltar",
	 	textSubmit: "Atualizar",
	 	formPluginEnabled: true,
	 	formOptions :{
	 		"beforeSend": function(xhr){
	 			xhr.abort();
	 			var xhrUpload = new XMLHttpRequest();
	 			var valido = $("#"+formId).validationEngine('validate');
	 			if(valido==false){
					xhrUpload.abort();
				}else{
					$("#"+formId).block({message: "<img border='0' src='"+"img/ajax-loader.gif"+"'/> &nbsp;Atualizando...",
						 css: { 'border': '0px',
								'background': 'transparent',
								'color': 'white'
						      } 
					});
				}
                xhrUpload.open( "POST",url,false);
                xhrUpload.setRequestHeader("Cache-Control", "no-cache");
                xhrUpload.setRequestHeader("X-Requested-With", "XMLHttpRequest");
                var fd = new FormData();
                var registro = popular();
                var uploadArray = registro.uploadArray;
                for(var i =0; i< uploadArray.length;i++){
                		fd.append(uploadArray[i].nomeVariavel, uploadArray[i].arquivo);
                }
                fd.append("json",$.toJSON(registro));
                xhrUpload.send(fd);
				if (xhrUpload.status == 200) {
                		//complete
					$("#"+formId).unblock();
					$("#"+formId).validationEngine("hide");
					//success
					showDialog("Sucesso","Atualizado com sucesso!");
					window.location.hash='';
					window.location.hash.replace('#', '');
					$("#subtitulo").html('<h3 class="ui-widget-header">Sucesso!</h3>');
					$("#formWrapper").html("Seus dados foram atualizados com sucesso.");
                	}else if(xhrUpload.status == 500){
                		//complete
    					$("#"+formId).unblock();
    					$("#"+formId).validationEngine("hide");
    					trataErro(xhrUpload, xhrUpload.statusText, "Erro");
                	}else{
                    		//complete
        					$("#"+formId).unblock();
        					$("#"+formId).validationEngine("hide");
        					//error
                    		showDialog('Erro',"Erro de comunicação");
                	}
                
	 		},
			resetForm: true
	 	}
	 });

	 //estiliza os botoes do wizard como jqueryUI componentes
	$("#back").button();
	$("#next").button();

	if(validate){
		//habilita a validacao do form
		$("#"+formId).validationEngine('attach');
	}
}

